import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_blobs

fig,ax = plt.subplots(3,3,figsize=(15,10))

def plot_line(row, column, slope, intercept, X):
    min_x = int(min(X[:,0]))
    max_x = int(max(X[:,0]))
    x = range(min_x,max_x)
    y = -(x*slope[0] + intercept)/slope[1]   
    ax[row,column].plot(x,y, color='black')
    return

for cluster_deviation,row in zip([2,4,8], range(3)):
X,y = make_blobs(n_samples=200,n_features=2,centers=2,random_state=10,   cluster_std = cluster_deviation)
     for C, column in zip([0.01, 1, 20], range(3)):
         logistic_regression = LogisticRegression(C=C, solver =
         'liblinear')
         lr = logistic_regression.fit(X,y)
         for target, color, marker in zip(range(2),['k','c'],['o','^']):
            ax[row,column].scatter(X[y==target,0], X[y==target,1],c=color,
                             marker=marker, label='class '+format(target))
            if row == 2:
               ax[row,column].set_xlabel('Feature 1', fontsize=15)
            ax[row,column].set_ylabel('Feature 2', fontsize=15)
            ax[row,column].set_title('Logistic Regression, C = '+str(C))
            ax[row,column].legend()
            # coef_.shape is (1,2) 
            plot_line(row,column,lr.coef_[0],lr.intercept_,X)  
plt.show();
